#include "libAcoustX/solver/bhp/BHPSedimentFactory.h"

std::shared_ptr<ax::bhp::Sediment> ax::bhp::SedimentFactory::createFromOceanSediment(ax::ocean::SedimentType st, double bottom_depth)
{
	switch (st)	
	{
	case ax::ocean::SedimentType::ST_Gravel:
	{
		return std::make_shared<ax::bhp::SedimentGravel>(bottom_depth);
	}
	case ax::ocean::SedimentType::ST_Sand:
	{
		return std::make_shared<ax::bhp::SedimentSand>();
	}
	case ax::ocean::SedimentType::ST_Silt:
	{
		return std::make_shared<ax::bhp::SedimentSilt>(bottom_depth);
	}
	case ax::ocean::SedimentType::ST_Clay:
	{
		return std::make_shared<ax::bhp::SedimentClay>();
	}
	case ax::ocean::SedimentType::ST_Ooze:
	{
		return std::make_shared<ax::bhp::SedimentOoze>();
	}
	case ax::ocean::SedimentType::ST_Mud:
	{
		return std::make_shared<ax::bhp::SedimentMud>(bottom_depth);
	}
	case ax::ocean::SedimentType::ST_Rocks:
	{
		return std::make_shared<ax::bhp::SedimentRocks>();
	}
	case ax::ocean::SedimentType::ST_Organic:
	{
		return std::make_shared<ax::bhp::SedimentOrganic>();
	}
	case ax::ocean::SedimentType::ST_Nodules:
	{
		return std::make_shared<ax::bhp::SedimentNodules>();
	}
	case ax::ocean::SedimentType::ST_HardBottom:
	{
		return std::make_shared<ax::bhp::SedimentHardBottom>();
	}
	case ax::ocean::SedimentType::ST_NoData:
	default:
		break;
	}

    return std::shared_ptr<ax::bhp::SedimentMud>();
}
